def can_partition(nums):
    """
    判断数组是否可以分割成两个和相等的子集
    
    参数:
    nums (list): 输入数组
    
    返回:
    bool: 是否可以分割
    """
    total = sum(nums)
    # 如果总和为奇数，无法分割
    if total % 2 != 0:
        return False
    
    target = total // 2
    # 如果任何元素大于目标值，无法分割
    if any(num > target for num in nums):
        return False
    
    # 使用动态规划，dp[j]表示是否可以组成和为j的子集
    dp = [False] * (target + 1)
    dp[0] = True  # 和为0的子集始终存在（空集）
    
    for num in nums:
        # 倒序遍历，确保每个元素只被考虑一次
        for j in range(target, num - 1, -1):
            dp[j] = dp[j] or dp[j - num]
    
    return dp[target]    